import { REQUEST } from '@/config'
import { objectMerge } from './tools/object'
import { handleTree } from './tools/transform'
import { urlDomain } from './tools/url'

// 静态资源拼接域名
export function staticUrl(url) {
  return urlDomain(url, REQUEST.STATIC_DOMAIN)
}

// 接口根目录拼接域名
export function rootUrl(url) {
  return urlDomain(url, REQUEST.DOMAIN)
}

// 表单重置
export function resetForm(refName) {
  if (this.$refs[refName]) {
    this.$refs[refName].resetFields()
  }
}

// 在列表页中的操作中获取选中的行
export function parseRows(row, onlyId = true, idField = '') {
  idField = idField || 'id'
  let rows = []
  if (!row || typeof row !== 'object') return list
  if (Array.isArray(row)) {
    rows = [...row]
  } else {
    rows = [row]
  }

  let list = []
  rows.map(item => {
    if (typeof item === 'object') {
      item[idField] && list.push(onlyId ? item[idField] : item)
    } else if (typeof item === 'string' || typeof item === 'number') {
      list.push(onlyId ? item : { [idField]: item })
    }
  })
  return list
}

// 表单赋值
export function dataToForm(target, source) {
  return objectMerge(target, source, false, false)
}

// 列表转树
export function listToTree(list, config = null) {
  let opt = {
    id: 'id', // 主键字段
    parentId: 'parent_id', //父级字段
    children: 'children', // 生成的子级字段
    disabled: 'disabled', // 生成禁用字段
    disabledList: [], // 禁用主键数组
    childEmptyShow: true, // 当子级为空时，是否还保留字段
    disabledShow: true // 当信息为禁用时，是否还保留该信息
  }
  if (config) {
    opt = { ...opt, ...config }
  }
  return handleTree(list, opt)
}

// 添加日期范围
export function addDateRange(params, dateRange, propName) {
  let search = {}
  if (params && typeof params === 'object') search = JSON.parse(JSON.stringify(params))

  dateRange = Array.isArray(dateRange) ? dateRange : []
  if (!propName || typeof propName === 'undefined') {
    search['beginTime'] = dateRange[0]
    search['endTime'] = dateRange[1]
  } else {
    search['begin' + propName] = dateRange[0]
    search['end' + propName] = dateRange[1]
  }
  return search
}
